// 控制台测试内容显示中间件
const express = require('express');
// 这个插件是控制台的表格插件，可以让内容以表格的形式在控制台输出
const Table = require('cli-table');
const consoleTest = express.Router();


// 已显示的消息数量
let index = 0;
let socketIndex = 0;

// 信息显示测试
let messageShow = (req, res, next) => {
	let url = req.url; //请求路径
	let time = getTime(); //请求时间
	let method = req.method.toUpperCase(); //请求类型
	let params = "无请求参数"


	switch (method) {
		case "POST":
			params = JSON.parse(JSON.stringify(req.body));
			break;
		case "GET":
			params = JSON.parse(JSON.stringify(req.query));
			break;
		default:
			break;
	}


	// 创建一个表格实例    
	const table = new Table({
		head: ['key', 'value'],
		chars: {
			'top': '═',
			'top-mid': '╤',
			'top-left': '╔',
			'top-right': '╗',
			'bottom': '═',
			'bottom-mid': '╧',
			'bottom-left': '╚',
			'bottom-right': '╝',
			'left': '║',
			'left-mid': '╟',
			'mid': '─',
			'mid-mid': '┼',
			'right': '║',
			'right-mid': '╢',
			'middle': '│'
		}
	});

	let Length = 0;
	for (let key in params) {
		table.push([key, params[key]]);
		Length++;
	}

	console.info(`\x1b[36m(${index})---------------(${time})----------------------START\x1b[0m`);
	console.info(`\x1b[33mhttp请求|${method}|类型，路由路径为${url},请求参数如下:\x1b[0m`);
	if (Length != 0) {
		console.log(table.toString());
	} else {
		console.log("\x1b[31m本次请求未带参数\x1b[0m");
	}
	console.info(`\x1b[36m(${index})---------------(${time})----------------------END\x1b[0m`);
	index++;
	next();
}

// socket请求显示
let socketShow = (Event, Data) => {
	let time = getTime();
	const table = new Table({
		head: ['key', 'value'],
		chars: {
			'top': '═',
			'top-mid': '╤',
			'top-left': '╔',
			'top-right': '╗',
			'bottom': '═',
			'bottom-mid': '╧',
			'bottom-left': '╚',
			'bottom-right': '╝',
			'left': '║',
			'left-mid': '╟',
			'mid': '─',
			'mid-mid': '┼',
			'right': '║',
			'right-mid': '╢',
			'middle': '│'
		}
	});

	for (let key in Data) {
		table.push([key, Data[key]]);
	}

	console.log(`\x1b[36m(${socketIndex})---------------(${time})----------------------START\x1b[0m`);
	console.log(`\x1b[33msocket请求|${Event}|事件,发送数据如下:\x1b[0m`);
	console.log(table.toString());
	console.log(`\x1b[36m(${socketIndex})---------------(${time})----------------------END\x1b[0m`);
	socketIndex++;
}

consoleTest.use(messageShow)

// 获取时间的方法
function getTime() {
	// 创建一个新的Date对象，表示当前日期和时间    
	let time = new Date();

	// 获取当前的小时、分钟和秒    
	let hours = time.getHours();
	let minutes = time.getMinutes();
	let seconds = time.getSeconds();

	// 使用padStart()方法确保时、分、秒总是以两位数字符串形式输出    
	hours = hours.toString().padStart(2, '0');
	minutes = minutes.toString().padStart(2, '0');
	seconds = seconds.toString().padStart(2, '0');

	// 输出格式化后的时间字符串    
	return (`${hours}时:${minutes}分:${seconds}秒`);
}

module.exports = {
	consoleTest,
	socketShow
};